/***
 * @Author: LVGRAPE
 * @Date: 2023-04-13 16:52:40
 * @LastEditTime: 2023-04-14 09:27:49
 * @LastEditors: LVGRAPE
 * @Description:
 * NOTE 设备描述信息, 主要用来区分是用什么芯片（核心），什么形态，有哪些装备，及其它功能
 * 1. 核心： ZINO_I,ZINO_PREMIUM,ZINO_RC等， 不同的核心指的是不同的芯片
 * 2. 形态： 机甲之芯 天空之翼 遥控器出厂程序 引导程序 测试程序 其它 青春版 遥控器指挥
 * 3. 装备： 无 8mm水弹炮 足球套装 机械臂 选择装备 ---必选！！！
 * @FilePath: \ZINO_MCU_SOURCE\ZINO_SRC\dev_info\dev_info.h
 * @可以输入预定的版权声明、个性签名、空行等
 */

#ifndef __dev_info_H_
#define __dev_info_H_
#ifdef __cplusplus
extern "C"
{
#endif // __cplusplus

#include <stdint.h>
#include "zino.h"
#define ZINO_INFO_NAME_MAX 24
    typedef enum {
        Heart_Of_Mecha, Wing_Of_Sky, Bootloader,
    }DEVICE_GROUP_EN;
    typedef enum {
        NONE_EQP, WaterBulletGun, FootballSuit, RobotArm, CaterpillarBand, AllInOne,
    }
    Equipment_GROUP_EN;
    typedef struct info{
        uint16_t id;
        char name[16];
    }__attribute__((aligned(4))) info_t;
    typedef struct {
        uint16_t CORE;
        uint16_t DEVICE;
        uint16_t EQUIPMENT;
        uint16_t OTHRE;
    }build_info_t;
    typedef struct {//NOTE 设备信息，可在bin文件找出来，也可以程序打印
        char start_key[8];//keyword for search
        info_t core;
        info_t device;
        info_t equipment;
     	info_t other; //additional info like manufacturer, serial number, etc.
        info_t build;
        uint32_t feature;
        uint32_t vid;//software version
        uint32_t sid;//hardware version
        char end_key[8];//keyword end
    }__attribute__((aligned(4))) dev_info_t;
    uint32_t get_dev_software_version();
    uint8_t get_dev_major_verion();
    uint8_t get_dev_minor_verion();
    uint8_t get_dev_build_number();
    const char* get_dev_core_name();
    const uint16_t get_dev_core_id();
    const char* get_dev_name();
    const uint16_t get_dev_id();
    const uint16_t get_eqm_id();
    const char* get_eqm_name();
    int check_dev_info();

//NOTE 产品信息在这里定义好！版本号在makefile 定义！
#define DEV_CORE_NAME "ZINO_DRONE"
#define DEV_CORE_ID 0X0B
#define DEV_NAME "TOPS"
#define DEV_ID 7
#define DEV_EQP_NAME "NONE"
#define DEV_EQP_ID 0

#ifdef __cplusplus
}
#endif // __cplusplus
#endif
